package com.example.zyl.common.utils;

import com.example.zyl.common.CommonResult;
import com.example.zyl.common.exception.ServiceException;
import com.example.zyl.common.utils.function.BranchHandle;

import java.util.function.Consumer;


/**
 * @author 邹阳林
 * 分支句柄资源类
 */
public class ConditionUtils {


    /**
     * 分支操作，用于替代 if-else
     *
     * @param isTrueOrFalse boolean
     * @return BranchHandle接口表达式
     */
    public static BranchHandle branchHandle(boolean isTrueOrFalse) {
        return (trueHandle, falseHandle) -> {
            if (isTrueOrFalse) {
                trueHandle.run();
            } else {
                falseHandle.run();
            }
        };
    }


    /**
     * 分支操作，用于替代 if-else
     *
     * @param isBlankOrNoBlank Object
     * @return BranchHandle接口表达式
     */
    public static BranchHandle branchHandle(Object isBlankOrNoBlank) {
        return (blankHandle, notBlankHandle) -> {
            if (ToolUtils.isEmpty(isBlankOrNoBlank)) {
                blankHandle.run();
            } else {
                notBlankHandle.run();
            }
        };
    }


    /**
     * 分支操作，用于替代 if-else
     *
     * @param isTrueOrFalse  boolean
     * @param isTrueOrFalse2 boolean
     * @return BranchHandle接口表达式
     */
    public static BranchHandle branchHandle(boolean isTrueOrFalse, boolean isTrueOrFalse2) {

        return (trueHandle, falseHandle) -> {
            if (isTrueOrFalse && isTrueOrFalse2) {
                trueHandle.run();
            } else {
                falseHandle.run();
            }
        };
    }


    /**
     * 分支操作，判断是否抛出异常
     *
     * @param isTrueOrFalse boolean
     * @return Consumer
     */
    public static Consumer<String> throwException(boolean isTrueOrFalse) {
        return (msg) -> {
            if (isTrueOrFalse) throw new ServiceException(msg);
        };
    }


    /**
     * 分支操作，判断是否为空抛出异常
     *
     * @param isBlankOrNoBlank Object
     * @return Consumer
     */
    public static Consumer<String> throwException(Object isBlankOrNoBlank) {
        return (msg) -> {
            if (ToolUtils.isEmpty(isBlankOrNoBlank)) throw new ServiceException(msg);
        };
    }


    /**
     * 分支操作，用于替代 if-else
     *
     * @param isTrueOrFalse boolean
     * @return BranchHandle接口表达式
     */
    public static CommonResult<?> branchHandles(boolean isTrueOrFalse) {
        if (isTrueOrFalse) {
            return CommonResult.success();
        } else {
            return CommonResult.fail();
        }
    }


}
